﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using CoVanHocTapProject.Infrastructure;
using CoVanHocTapData.Entities;
using CoVanHocTapData.Concretes;
using CoVanHocTapData.Interface;

namespace CoVanHocTapProject.Controllers
{
    public class ChuyenNganh2Controller : Controller
    {
        #region repos
        INganhRepository nganhDaoTaoRepos = new NganhDaoTaoRepository();
        IChuongTrinhDaoTaoRepository ctdtRepos = new ChuongTrinhDaoTaoRepository();
        IMonHocRepository monHocRepos = new MonHocRepository();
        IKetQuaHocRepository ketQuaHocRepos = new KetQuaHocRepository();
        ISinhVien_TichLuyRepository svTichLuyRepos = new SinhVien_TichLuyRepositpry();
        IHocKyRepository hocKyRepos = new HocKyRepository();
        IKetQuaHocRepository ketquahoctapRepos = new KetQuaHocRepository();
        IChiTietKhoiCTDTRepository ctKhoiCTDTRepos = new ChiTietKhoiCTDTRepository();
        IKhoiChuongTrinhDaoTaoRepository khoiCTDTRepos = new KhoiChuongTrinhDaoTaoRepository();
        #endregion

        public ActionResult Index()
        {
            return View();
        }

        public ActionResult GoiYChuyenNganh2()
        {
            
            return View();
        }

        static List<SinhVienChuyenNganh2> tatcaNganh2List ;
        static List<Khoa> KhoaCN2List ;
        
        public JsonResult GoiYChuyenNganh2UC()
        {
            SinhVien sv = Publics.sinhVienDangNhap;

            SinhVien_TichLuy sv_tichLuy = null;
            var nganhChinh = nganhDaoTaoRepos.LayNganhTuMaSV(sv.MSSV);
            var nganhDaoTaoDanhChoCN2 = nganhDaoTaoRepos.LayNganhDaoTaoChuyenNganh2TheoSinhVien(sv).ToList();

            if (nganhDaoTaoDanhChoCN2.IndexOf(nganhChinh) != -1)
            {
                nganhDaoTaoDanhChoCN2.Remove(nganhChinh);
            }

            List<SinhVienChuyenNganh2>  tatCaNganhList = new List<SinhVienChuyenNganh2>();
                KhoaCN2List = new List<Khoa>();
                List<KetQuaHoc> tatCaKetQuaHocSV = ketQuaHocRepos.LayTatCaKetQuaMonKhongTrungCuaSinhVien(sv);




                
                int i = 0;
                foreach (var nganhDaoTao2Item in nganhDaoTaoDanhChoCN2)
                {
                    Khoa khoaCN2 = KhoaRepository.LayKhoaTheoNganh(nganhDaoTao2Item.NganhID);
                    if (KhoaCN2List.IndexOf(khoaCN2) == -1)
                        KhoaCN2List.Add(khoaCN2);

                    sv_tichLuy = svTichLuyRepos.LaySinhVienTichLuy(sv.MSSV, nganhDaoTao2Item.NganhID, sv.Lop.HeDaoTaoID, Publics.hocKyHienTai.HocKyID).FirstOrDefault();
                    float tongTCDatTheoNganh = 0, tongTCNganh = 0;
                    float tongTCDaHoc = 0, DTBChuaChiaDahoc = 0;
                    float DTBTL = 0;
                    if (sv_tichLuy == null)
                    {

                        var ctdtTheoCN2 = ctdtRepos.LayChuongTrinhDaoTao(nganhDaoTao2Item.NganhID, sv.Lop.NienKhoaID.Value, sv.Lop.HeDaoTaoID);
                        foreach (var ctdtCN2Item in ctdtTheoCN2)
                        {

                            MonHoc mHoc = monHocRepos.LayMonHocTheoMaMH(ctdtCN2Item.MonHocID);
                            if (mHoc == null)
                                continue;
                            tongTCNganh += mHoc.SoDVHocTap.Value;
                            KetQuaHoc ketQuaMon = ketQuaHocRepos.LayKetQuaHocTapCaoNhatTheoSVMonHoc(ctdtCN2Item.MonHocID, sv.MSSV);

                            if (ketQuaMon == null)
                                continue;
                            else
                            {
                                if (ketQuaMon.DTB.Value >= 5)
                                    tongTCDatTheoNganh += mHoc.SoDVHocTap.Value;
                                tongTCDaHoc += mHoc.SoDVHocTap.Value;
                                DTBChuaChiaDahoc += ketQuaMon.DTB.Value * mHoc.SoDVHocTap.Value;
                            }
                        }
                        if (tongTCDaHoc != 0)
                            DTBTL = DTBChuaChiaDahoc / tongTCDaHoc;
                        SinhVien_TichLuy themSVTichLuy = new SinhVien_TichLuy()
                        {
                            HeDaoTaoID = sv.Lop.HeDaoTaoID,
                            HocKyDeTinhID = Publics.hocKyHienTai.HocKyID,
                            MSSV = sv.MSSV,
                            NganhID = nganhDaoTao2Item.NganhID,
                            TinChiTichLuy = int.Parse(tongTCDatTheoNganh.ToString()),
                            TongTinChiNganh = int.Parse(tongTCNganh.ToString()),
                            TrungBinhTichLuy = DTBTL,
                        };
                        svTichLuyRepos.ThemSinhVienTichLuy(themSVTichLuy);
                    }
                    else
                    {
                        DTBTL = float.Parse( sv_tichLuy.TrungBinhTichLuy.ToString());
                        tongTCDatTheoNganh = sv_tichLuy.TinChiTichLuy.Value;
                        tongTCNganh = sv_tichLuy.TongTinChiNganh.Value;
                    }

                    string tooltipChoThongTin = "Sinh viên đạt " + tongTCDatTheoNganh + "/" + tongTCNganh + " tín chỉ";
                    if (DTBTL != 0)
                        tooltipChoThongTin += "<br/>Sinh viên đã học các môn có trong chương trình đào tạo của chuyên ngành này có ĐTBTL là: " + Math.Round( DTBTL,2);
                    if (tongTCDaHoc >= tongTCNganh / 8 && DTBTL >= 6)
                        tooltipChoThongTin += "<br/>Sinh viên nên tham khảo thêm các ngành khác nếu muốn học CN2";

                    SinhVienChuyenNganh2 thongtin = new SinhVienChuyenNganh2()
                    {
                        id = "ttnganh" + i.ToString(),
                        name = tooltipChoThongTin,
                        children = null,
                        data = null
                    };

                    SinhVienChuyenNganh2 nganhTree = new SinhVienChuyenNganh2()
                    {
                        id = "nganhTree" + i.ToString(),
                        name = "<b>" + nganhDaoTao2Item.TenNganh + "</b>",
                        data = thongtin,
                        children = null,
                        KhoaID = khoaCN2.KhoaID,
                        TenKhoa = khoaCN2.TenKhoa,

                    };
                    tatCaNganhList.Add(nganhTree);
                    i++;
                    //break;
                }
            
            List<SinhVienChuyenNganh2> tempList = tatCaNganhList;
            tatcaNganh2List = tatCaNganhList;
            tatCaNganhList = new List<SinhVienChuyenNganh2>();
            List<SinhVienChuyenNganh2> chiaNganhList = new List<SinhVienChuyenNganh2>();

            
            int dem = 0;
            
            foreach(var khoaCN2Item in KhoaCN2List)
            {
                foreach (var nganhItem in tempList)
                {
                    if (nganhItem.KhoaID.Equals(khoaCN2Item.KhoaID))
                    {
                        chiaNganhList.Add(nganhItem);
                    }
                    else
                        continue;
                }

                
                SinhVienChuyenNganh2 AddItem = new SinhVienChuyenNganh2()
                {
                    id = "chiaNganh"+dem.ToString(),
                    name = "Khoa "+chiaNganhList.FirstOrDefault().TenKhoa,
                    data =null,
                    children = chiaNganhList.ToArray()
                };
                chiaNganhList = new List<SinhVienChuyenNganh2>();
                dem++;
                tatCaNganhList.Add(AddItem);
            }

            sv_tichLuy = svTichLuyRepos.LaySinhVienTichLuy(sv.MSSV, sv.Lop.NganhID, sv.Lop.HeDaoTaoID, Publics.hocKyHienTai.HocKyID).FirstOrDefault();

            if (sv_tichLuy == null)
                svTichLuyRepos.ThemSinhVienTichLuy(sv, sv.Lop.NganhID, sv.Lop.HeDaoTaoID, Publics.hocKyHienTai.HocKyID);

            HanDaoTao hanDaoTaoSV = HanDaoTaoRepository.LayHanDaoTaoTheoNganhHe(sv.Lop.NganhID, sv.Lop.HeDaoTaoID).FirstOrDefault();
            var hocKyList = hocKyRepos.LayHocKyTheoNam(DateTime.Now.Year);
            int hocKyCuaNam=0;
            if (hocKyList.Count() == 0)
                hocKyCuaNam = 2;
            else if (hocKyList.Count() == 1)
                hocKyCuaNam = 1;
            
            float thoiGianDaoTao = hanDaoTaoSV.SoNamHoc.Value + hanDaoTaoSV.SoNamToiDaQuaHan.Value;
            float hocKyConLai = (sv.Lop.NienKhoaID.Value + thoiGianDaoTao-DateTime.Now.Year)*2 + hocKyCuaNam;

            SinhVienChuyenNganh2 thongtindata = new SinhVienChuyenNganh2()
            {
                id="ttdataroot",
                name = "Ngành chính: " + nganhChinh.TenNganh + "<br/>Lớp: " + sv.LopID + "<br/>ĐTBTL: " + Math.Round(sv_tichLuy.TrungBinhTichLuy.Value, 2) + "<br/>Thời gian đào tạo còn: " + hocKyConLai + " học kỳ chính.",
            };

            SinhVienChuyenNganh2 mainTree = new SinhVienChuyenNganh2()
            {
                id ="root",
                name = "<b>"+sv.MSSV +"<br/>"+sv.HoLot+" "+sv.Ten+"</b>",
                data = thongtindata,
                children = tatCaNganhList.ToArray(),
            };


            return Json(mainTree, JsonRequestBehavior.AllowGet);
        }

        static List<NganhDaoTao> nganhDaoTaoDanhChoCN2;
        static NganhDaoTao nganhDaoTao2;
        static float hocKyConLai=0;
        public ActionResult LoTrinhHocTapCN2()
        {
            SinhVien sv = Publics.sinhVienDangNhap;
            if (sv == null)
               return RedirectToAction("Index", "TrangChu");
            var nganhChinh = nganhDaoTaoRepos.LayNganhTuMaSV(sv.MSSV);
            nganhDaoTaoDanhChoCN2 = nganhDaoTaoRepos.LayNganhDaoTaoChuyenNganh2TheoSinhVien(sv).ToList();

            if (nganhDaoTaoDanhChoCN2.IndexOf(nganhChinh) != -1)
            {
                nganhDaoTaoDanhChoCN2.Remove(nganhChinh);
            }

            MonHocTheoHocKy nganh = new MonHocTheoHocKy();
            nganh.TenNganhDaoTao2List = new List<SelectListItem>();
            for (int i = 0; i < nganhDaoTaoDanhChoCN2.Count; i++)
            {
                SelectListItem item = new SelectListItem()
                {
                    Text = nganhDaoTaoDanhChoCN2[i].TenNganh,
                    Value = i.ToString()
                };
                nganh.TenNganhDaoTao2List.Add(item);
            }
            nganh.TenNganhDaoTao2List[0].Selected = true;
            HanDaoTao hanDaoTaoSV = HanDaoTaoRepository.LayHanDaoTaoTheoNganhHe(sv.Lop.NganhID, sv.Lop.HeDaoTaoID).FirstOrDefault();
            var hocKyList = hocKyRepos.LayHocKyTheoNam(Publics.hocKyHienTai.NamHoc.Value);
            int hocKyCuaNam = 0;
            if (hocKyList.Count() == 0)
                hocKyCuaNam = 2;
            else if (hocKyList.Count() == 1)
                hocKyCuaNam = 1;


            //main tree
            float thoiGianDaoTao = hanDaoTaoSV.SoNamHoc.Value + hanDaoTaoSV.SoNamToiDaQuaHan.Value;
            hocKyConLai = (sv.Lop.NienKhoaID.Value + thoiGianDaoTao - DateTime.Now.Year) * 2 + hocKyCuaNam;
            nganh.HocKyDaoTaoConLai = int.Parse(hocKyConLai.ToString());
            return View(nganh);
        }

        [HttpPost]
        public ActionResult LoTrinhHocTapCN2(string TenNganhDaoTao)
        {
            if (Publics.sinhVienDangNhap == null)
                return RedirectToAction("Index","TrangChu");
            nganhDaoTao2 = nganhDaoTaoDanhChoCN2[int.Parse(TenNganhDaoTao)];
            MonHocTheoHocKy nganh = new MonHocTheoHocKy();
            nganh.TenNganhDaoTao2List = new List<SelectListItem>();
            for (int i = 0; i < nganhDaoTaoDanhChoCN2.Count; i++)
            {
                SelectListItem item = new SelectListItem()
                {
                    Text = nganhDaoTaoDanhChoCN2[i].TenNganh,
                    Value = i.ToString()
                };
                nganh.TenNganhDaoTao2List.Add(item);
            }
            nganh.TenNganhDaoTao2List[int.Parse(TenNganhDaoTao)].Selected = true;
            nganh.HocKyDaoTaoConLai = int.Parse(hocKyConLai.ToString());
            return View(nganh);
        }

        public JsonResult LoTrinhHocTapCN2UC()
        {
            if (nganhDaoTao2 == null)
                return Json(null);
            SinhVien sv = Publics.sinhVienDangNhap;
            SinhVien_TichLuy sv_tichLuyNganhChinh = svTichLuyRepos.LaySinhVienTichLuy(sv.MSSV, sv.Lop.NganhID, sv.Lop.HeDaoTaoID, Publics.hocKyHienTai.HocKyID).FirstOrDefault();
            SinhVien_TichLuy sv_tichLuyNganh2 = svTichLuyRepos.LaySinhVienTichLuy(sv.MSSV, nganhDaoTao2.NganhID, sv.Lop.HeDaoTaoID, Publics.hocKyHienTai.HocKyID).FirstOrDefault();
            var nganhChinh = nganhDaoTaoRepos.LayNganhTuMaSV(sv.MSSV);
           
            List<MonHocTheoHocKy> monHocBatBuocList = new List<MonHocTheoHocKy>();
            List<MonHocTheoHocKy> monHocTuChonList = new List<MonHocTheoHocKy>();
            List<MonHocTheoHocKy> monHocTuChonTree = new List<MonHocTheoHocKy>();

            int tongTCDatBatBuoc = 0;
            int tongTCDatTuChon = 0, tongTCTuChon = 0;
            float tongTCBatBuoc = 0;

            HanDaoTao hanDaoTao = HanDaoTaoRepository.LayHanDaoTaoTheoNganhHe(sv.Lop.NganhID, sv.Lop.HeDaoTaoID).FirstOrDefault();
            int thoiGianDaoTaoToiDa = int.Parse(hanDaoTao.SoNamHoc.ToString()) * 2;

            //lay ctdt cua CN2
            var ctdtList = ctdtRepos.LayChuongTrinhDaoTao(nganhDaoTao2.NganhID, sv.Lop.NienKhoaID.Value,sv.Lop.HeDaoTaoID);

            //mh bat buoc            
            for (int hocky = 1; hocky <= thoiGianDaoTaoToiDa; hocky++)
            {
                float tongTCDatTheoHocKy = 0; //tin chi dat
                float tongTCTheoHocKy = 0; //tong tin chi hoc ky
                foreach (var ctdtItem in ctdtList)
                {
                    //if (hocky == 1 || hocky == 2)
                    //    break;
                    if (!ctdtItem.TuChon.Value && int.Parse(ctdtItem.HocKy) == (hocky))
                    {
                        
                        MonHocTheoHocKy mHocItem = monHocRepos.LayMonHocTheoMaMH(ctdtItem.MonHocID, ctdtItem.HocKy, nganhDaoTao2.NganhID);
                        var kqhtList = ketquahoctapRepos.LayKetQuaHocTapTheoSVMonHoc(ctdtItem.MonHocID, Publics.sinhVienDangNhap.MSSV);
                        KetQuaHoc ketQuaHTSV = new KetQuaHoc();
                        if (kqhtList.Count() > 0)
                        {
                            if (kqhtList.Count() > 1)
                            {
                                ketQuaHTSV = ketquahoctapRepos.LayKetQuaCaoNhat(kqhtList.ToList());
                            }
                            else
                                ketQuaHTSV = kqhtList.FirstOrDefault();
                            if (ketQuaHTSV.DTB != null)
                            {
                                if (ketQuaHTSV.DTB.Value >= 5)
                                {
                                    tongTCDatBatBuoc += int.Parse(ketQuaHTSV.MonHoc.SoDVHocTap.Value.ToString());
                                    mHocItem.CoKQHT = true;
                                    mHocItem.DTB = ketQuaHTSV.DTB.Value;
                                    mHocItem.DVHT = ketQuaHTSV.MonHoc.SoDVHocTap.Value;
                                    tongTCDatTheoHocKy += mHocItem.DVHT;
                                }
                            }
                            else
                                mHocItem.CoKQHT = false;
                        }
                        monHocBatBuocList.Add(mHocItem);
                        tongTCTheoHocKy += mHocItem.DVHT;
                        tongTCBatBuoc += mHocItem.DVHT;
                    }
                }
               
                foreach (var item in monHocBatBuocList)
                {
                    if (int.Parse(item.HocKy) == hocky)
                    {
                        item.TongTCDatTheoHocKy1 = tongTCDatTheoHocKy;
                        item.TongTCTheoHocKy1 = tongTCTheoHocKy;
                        break;
                    }
                }
                
            }

            //tu chon
            //hien thi mh trog khoi tu chon
            List<string> tenKhoiCTDT = new List<string>();
            IQueryable<KhoiChuongTrinhDaoTao> khoiCTDT = khoiCTDTRepos.LayKhoiCTDT(nganhDaoTao2.NganhID, Publics.sinhVienDangNhap.Lop.NienKhoaID.Value, Publics.sinhVienDangNhap.Lop.HeDaoTaoID);

            MonHocTheoHocKy thongtinData = new MonHocTheoHocKy(); //thong tin de tooltip      
            int TongTCCacKhoiTuChon=0;
            foreach (var khoiItem in khoiCTDT)
            {
                TongTCCacKhoiTuChon += khoiItem.SoTCBatBuoc.Value;
                tongTCDatTuChon = 0;
                int hocKy;
                //if (khoiItem.HocKy == null)
                //    hocKy = 0;
                //else
                //    hocKy = khoiItem.HocKy.Value;
                var ctKhoiCTDT = ctKhoiCTDTRepos.layChiTietKhoiCTDT(nganhDaoTao2.NganhID, khoiItem.ID, khoiItem.HocKys);

                string tenKhoi = "";
                monHocTuChonList = new List<MonHocTheoHocKy>();
                //List<int> tongTCKhoiTuChon =new List<int>(); //ds so tc sv dat tuong ung hoi tu chon
                foreach (var chiTietItem in ctKhoiCTDT)
                {
                    //if (tenKhoiCTDT.IndexOf(chiTietItem.TenKhoiMonTuChon) == -1)
                    //    tenKhoiCTDT.Add(chiTietItem.TenKhoiMonTuChon);
                    
                    tenKhoi = khoiItem.TenKhoiMonHoc;

                    var kqhtList = ketquahoctapRepos.LayKetQuaHocTapTheoSVMonHoc(chiTietItem.MonHocID, Publics.sinhVienDangNhap.MSSV);
                    var kqcaoNhat = ketquahoctapRepos.LayKetQuaCaoNhat(kqhtList.ToList());

                    float soDVHTTheoMHoc = 0; //hien thi so tin chi
                    bool flag = false; //ghi dau dtb mh cua sv > 5 : true
                    foreach (var kqItem in kqhtList)
                    {
                        if (kqItem.DTB != null && kqItem.DTB.Value >= 5)
                        {
                            flag = true;
                            tongTCDatTuChon += int.Parse(kqItem.MonHoc.SoDVHocTap.Value.ToString());

                            break;
                        }
                    }
                    soDVHTTheoMHoc = monHocRepos.LayMonHocTheoMaMH(chiTietItem.MonHocID).SoDVHocTap.Value;
                    MonHocTheoHocKy tuChonTreeChildren = new MonHocTheoHocKy();
                    if (flag)
                    {
                        MonHocTheoHocKy thongtinTuChon = new MonHocTheoHocKy()
                        {
                            id="tttuchonDau",
                            name="Môn học này sinh viên "+Publics.sinhVienDangNhap.MSSV+" đã hoàn thành với ĐTB là "+kqcaoNhat.DTB,
                        };
                        tuChonTreeChildren = new MonHocTheoHocKy()
                        {

                            TenKhoiMonTuChon = tenKhoi,
                            id = "tuchon" + chiTietItem.MonHocID,
                            name = "<p style='background-color: #4CC417'>" + chiTietItem.MonHocID + " - " + soDVHTTheoMHoc + "<p style='font-size:10px; background-color: #4CC417; height:30px'>" + chiTietItem.TenMonHoc + "</p></p>",
                            data = thongtinTuChon,
                            children = null
                        };
                    }
                    else
                    {
                        MonHocTheoHocKy thongtinTuChon = new MonHocTheoHocKy()
                        {
                            id = "tttuchonRot",
                            name = "Môn học này sinh viên "+Publics.sinhVienDangNhap.MSSV+" đã hoàn thành với ĐTB là "+kqcaoNhat.DTB,
                        };
                        tuChonTreeChildren = new MonHocTheoHocKy()
                        {

                            TenKhoiMonTuChon = tenKhoi,
                            id = "tuchon" + chiTietItem.MonHocID,
                            name = chiTietItem.MonHocID + " - " + soDVHTTheoMHoc + "<p style='font-size:10px'>" + chiTietItem.TenMonHoc + "</p>",
                            data = thongtinTuChon,
                            children = null
                        };
                    }

                    tongTCTuChon += int.Parse(monHocRepos.LayMonHocTheoMaMH(chiTietItem.MonHocID).SoDVHocTap.Value.ToString());
                    monHocTuChonList.Add(tuChonTreeChildren);
                }

                thongtinData = new MonHocTheoHocKy()
                {
                    id = "khoituchondata",
                    name = "Sinh viên đạt " + tongTCDatTuChon + "/" + tongTCTuChon + " tín chỉ",
                    children = null,
                    data = null
                };

                MonHocTheoHocKy khoiTuChonTree = new MonHocTheoHocKy()
                {
                    id = "khoituchon" + khoiItem.ID,
                    name = "<b valign='middle'>"+tenKhoi+"</b>",
                    data = thongtinData,
                    children = monHocTuChonList.ToArray()
                };
                monHocTuChonTree.Add(khoiTuChonTree);
            }

            int i = 1;
            MonHocTheoHocKy mainTree;
            MonHocTheoHocKy tempTree;
            List<MonHocTheoHocKy> treeChildren = new List<MonHocTheoHocKy>(); //cay chung cac hk
            List<MonHocTheoHocKy> treeChildrenHK1 = new List<MonHocTheoHocKy>(); //hk1
            MonHocTheoHocKy hk1Tree = new MonHocTheoHocKy();

            MonHocTheoHocKy batbuocMHDauData = new MonHocTheoHocKy();

            thongtinData = new MonHocTheoHocKy() // tooltip cho tug hoc ky
            {
                id = "khoibbhocky1data",
                name = "Học kỳ 1 sinh viên không được đăng ký chuyên ngành 2",
                children = null,
                data = null
            };

             hk1Tree = new MonHocTheoHocKy()
            {
                id = "hk1",
                name = "<br/><b>" + "Học kỳ 1</b>",
                data = thongtinData,
                children = null
            };
            treeChildren.Add(hk1Tree);
            thongtinData = new MonHocTheoHocKy() // tooltip cho tug hoc ky
            {
                id = "khoibbhocky2data",
                name = "Học kỳ 2 sinh viên không được đăng ký chuyên ngành 2",
                children = null,
                data = null
            };

             hk1Tree = new MonHocTheoHocKy()
            {
                id = "hk2",
                name = "<br/><b>" + "Học kỳ 2</b>",
                data = thongtinData,
                children = null
            };
            treeChildren.Add(hk1Tree);


            for (int hocKy = 1; hocKy <= thoiGianDaoTaoToiDa; hocKy++)
            {
                treeChildrenHK1 = new List<MonHocTheoHocKy>();
                foreach (var item in monHocBatBuocList)
                {
                    tempTree = new MonHocTheoHocKy();
                    tempTree = item;
                    tempTree.id = "bb" + hocKy.ToString() + i.ToString()+item.MonHocID;
                    tempTree.children = null;
                    if (int.Parse(item.HocKy) == hocKy)
                    {
                        if (item.CoKQHT && item.DTB >= 5)
                        {
                            batbuocMHDauData = new MonHocTheoHocKy()
                            {
                                id = "dauMH",
                                name = "Môn học này sinh viên "+Publics.sinhVienDangNhap.MSSV+" đã hoàn thành với ĐTB là "+item.DTB,
                                children = null
                            };
                            tempTree.data = batbuocMHDauData;
                            tempTree.name = "<p style='background-color: #4CC417'>" + item.MonHocID + " - " + item.DVHT + "<p style='font-size:10px; background-color: #4CC417; height:30px'>" + item.TenMonHoc + "</p></p>";
                            treeChildrenHK1.Add(tempTree);
                        }
                        else
                        {
                            batbuocMHDauData = new MonHocTheoHocKy()
                            {
                                id = "kdauMH",
                                name = "Môn học này cần phải hoàn thành!",
                                children = null
                            };
                            tempTree.name = item.MonHocID + " - " + item.DVHT + "<p style='font-size:10px'>" + item.TenMonHoc + "</p>";
                            tempTree.data = batbuocMHDauData;
                            treeChildrenHK1.Add(tempTree);
                        }
                        i++;
                    }

                }

                
                   
                if (treeChildrenHK1.Count > 0)
                {
                    thongtinData = new MonHocTheoHocKy() // tooltip cho tug hoc ky
                            {
                                id = "khoibbhockydata",
                                name = "Sinh viên đạt " + treeChildrenHK1.FirstOrDefault().TongTCDatTheoHocKy1 + "/" + treeChildrenHK1.FirstOrDefault().TongTCTheoHocKy1 + " tín chỉ",
                                children = null,
                                data = null
                            };
                    

                    hk1Tree = new MonHocTheoHocKy()
                    {
                        id = "hk" + (hocKy+2).ToString(),
                        name = "<br/><b>" + "Học kỳ " + (hocKy + 2).ToString() + "</b>",
                        data = thongtinData,
                        children = treeChildrenHK1.ToArray()
                    };
                    treeChildren.Add(hk1Tree);
                }
            }

            

            thongtinData = new MonHocTheoHocKy()
            {
                id = "batbuoctreedata",
                name = "Sinh viên phải hoàn thành các môn bắt buộc quy định<br/>Tổng số tín chỉ các môn học bắt buộc: "+tongTCBatBuoc,
                children = null,
                data = null
            };

            MonHocTheoHocKy batbuocTree = new MonHocTheoHocKy()
            {
                id = "batbuocTree",
                name = "<br/>Môn học bắt buộc",
                data = thongtinData,
                children = treeChildren.ToArray()
            };
            
            thongtinData = new MonHocTheoHocKy()
            {
                id = "batbuoctreedata",
                name = "Sinh viên phải hoàn thành tối thiểu số tín chỉ theo từng phần tự chọn theo quy định<br/>Tổng số tín chỉ các khối tự chọn quy định: "+TongTCCacKhoiTuChon,
                children = null,
                data = null
            };

            MonHocTheoHocKy tuchonTree = new MonHocTheoHocKy()
            {
                id = "tuchonTree",
                name = "<br/>Môn học tự chọn",
                data = thongtinData,
                children = monHocTuChonTree.ToArray()
            };

            treeChildren = new List<MonHocTheoHocKy>();

            treeChildren.Add(batbuocTree);
            treeChildren.Add(tuchonTree);


            SinhVienChuyenNganh2 thongtindata = new SinhVienChuyenNganh2()
            {
                id = "ttdataroot",
                name = "Ngành chính: " + nganhChinh.TenNganh + "<br/>Lớp: " + sv.LopID+"<br/>ĐTBTL ngành chính: "+ Math.Round(sv_tichLuyNganhChinh.TrungBinhTichLuy.Value,2) + "<br/>ĐTBTL ngành "+nganhDaoTao2.TenNganh+": " + Math.Round(sv_tichLuyNganh2.TrungBinhTichLuy.Value, 2) + "<br/>Thời gian đào tạo còn: " + hocKyConLai + " học kỳ chính.",
            };
            mainTree = new MonHocTheoHocKy()
            {
                id="root",
                name = "<b>" + sv.MSSV + "<br/>" + sv.HoLot + " " + sv.Ten + "</b>",
                data = thongtindata,
                children = treeChildren.ToArray(),
                HocKyDaoTaoConLai = int.Parse(hocKyConLai.ToString()),
            };

            
            return Json(mainTree, JsonRequestBehavior.AllowGet);
        }

        
    }
}
